﻿/*
 * Created by SharpDevelop.
 * User: Renzo
 * Date: 25/09/2011
 * Time: 02:52 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;
using Business_Logic;
using Business_Entity;

namespace PetSoft.GUI.RRHH
{
	/// <summary>
	/// Description of GUIMantenimientoEmpleado.
	/// </summary>
	public partial class GUIMantenerEmpleado : Form
	{
		private Form ventanaPopUp;
		private List<BEEmpleado> lista;
		private int pos;
		private int colCheck;
		private int colN;
		
		public GUIMantenerEmpleado()
		{
			try
			{
				//
				// The InitializeComponent() call is required for Windows Forms designer support.
				//
				InitializeComponent();
				
				/*codigo de privilegios*/
	            
				this.resultadosDGV.CellDoubleClick += new DataGridViewCellEventHandler(this.doubleClickResultadosDGV);
	            this.nuevoBTN.Enabled = false;
	            this.modDatosBTN.Enabled = false;
	            this.modTurnoBTN.Enabled = false;
	            this.eliminarBTN.Enabled = false;
	            
	            for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
	                if ((new BLPrivilegio()).existePrivilegio(2,"RRHH","EMPL",BLInfo.UsuarioActual.Rol.Privilegio)){
	                    this.nuevoBTN.Enabled = true;
	                    this.modDatosBTN.Enabled = true;
	                    this.modTurnoBTN.Enabled = true;
	                    this.eliminarBTN.Enabled = true;
	                }
	            }
	                
	            
	            /*end*/
	            
				this.lista = null;
				this.colCheck = 0;
				this.colN = 9;
				
				this.cargoCB.Items.AddRange(new object[] {
										"<Seleccionar>"});
				this.cargoCB.Text = "<Seleccionar>";
				
				this.nombreTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.apPaternoTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.apMaternoTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.docIdentidadTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
				//
				// TODO: Add constructor code after the InitializeComponent() call.
				//
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}

		private void cerrarPopUp(object sender, EventArgs e){
			this.ventanaPopUp = null;
		}
		
		private void cerrarPopUpActualizar(object sender, EventArgs e){
			this.ventanaPopUp = null;
//			if ((nombreTB.Text != "") || (apPaternoTB.Text != "") ||
//		   (apMaternoTB.Text != "") || (areaCB.Text != "<Seleccionar>") ||
//		   (cargoCB.Text != "<Seleccionar>") || (docIdentidadTB.Text != "") ||
//		   (sexoCB.Text != "<Seleccionar>"))
//			{
			try{
				this.resultadosDGV.Rows.Clear();
				BLEmpleado bl = new BLEmpleado();
				List<BEEmpleado> be = new List<BEEmpleado>();
				
				List<String> datos = new List<String>();
				datos.Add(nombreTB.Text);
				datos.Add(apPaternoTB.Text);
				datos.Add(apMaternoTB.Text);
				datos.Add(areaCB.Text);
				datos.Add(cargoCB.Text);
				datos.Add(docIdentidadTB.Text);
				datos.Add(sexoCB.Text);
				for (int i=0; i<datos.Count; i++)
				{
					if ((datos[i] == null) || (datos[i] == "<Seleccionar>"))
						datos[i] = "";
				}
				be = bl.buscarEmpleado(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5],
				                       datos[6]);
				if (be != null)
				{
					this.resultadosDGV.AllowUserToAddRows = true;
					this.lista = be;
					this.resultadosDGV.Rows.Clear();
					for (int j=0; j<be.Count; j++)
					{
						string[] fila = null;
						fila = new string[]{
									false.ToString(),
									be[j].IdEmpleado.ToString(),
						            be[j].Nombre,
						            be[j].ApPaterno,
						            be[j].ApMaterno,
						            be[j].Area,
						            be[j].Cargo,
						            be[j].DocIdentidad,
						            be[j].Sexo,
						            j.ToString()
						            };
						this.resultadosDGV.Rows.Add(fila);
					}
					this.resultadosDGV.AllowUserToAddRows = false;
					if (this.resultadosDGV.Rows.Count == 1)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
					else if (this.resultadosDGV.Rows.Count == 0)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
					else if (this.resultadosDGV.Rows.Count > 1)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
				}
//			}
				resultadosDGV.Rows[pos].Cells[this.colCheck].Value = (bool) true;
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					fila.Selected = false;
				}
				resultadosDGV.Rows[pos].Selected = true;
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void registrarNuevoEmpleadoClick(object sender, EventArgs e)
		{
			try
			{
				if (ventanaPopUp == null){				
					GUIRegistrarEmpleado ventanaNuevoEmpleado = new GUIRegistrarEmpleado();
					this.ventanaPopUp = ventanaNuevoEmpleado;
					this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUpActualizar);
					//this.ventanaPopUp.Closing += new CancelEventHandler(this.actualizarGrid);
					this.ventanaPopUp.ShowDialog();
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}		
		
		void modificarDatosEmpleadoClick(object sender, EventArgs e)
		{
			try
			{
				int cont = 0;
				int aux = 0;
				int pos = 0;
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				if (cont == 0)
				{
					MessageBox.Show("Seleccione un empleado.","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);	
				}
				else if (cont == 1)
				{				
					DataGridViewRow fila = resultadosDGV.Rows[pos];
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						if (ventanaPopUp == null){
							if (this.lista != null){
								GUIModificarEmpleado ventanaModEmpleado = new GUIModificarEmpleado();
								ventanaModEmpleado.llenarDatos(lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
								ventanaModEmpleado.empleado = lista[int.Parse(fila.Cells[this.colN].Value.ToString())];
								ventanaModEmpleado.habilitarTextBoxes();
								ventanaModEmpleado.deshabilitarButtons();
								this.pos = pos;
								this.ventanaPopUp = ventanaModEmpleado;
								this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUpActualizar);
								this.ventanaPopUp.ShowDialog();
							}
						}
					}
					cont++;
				}
				else if (cont > 1)
				{
					MessageBox.Show("Seleccione sólo un empleado","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);		
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		
		void modificarCalendarioEmpleadoClick(object sender, EventArgs e)
		{
			try{
				int cont = 0;
				int aux = 0;
				int pos = 0;
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				if (cont == 0)
				{
					MessageBox.Show("Seleccione un empleado.","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);	
				}
				else if (cont == 1)
				{				
					DataGridViewRow fila = resultadosDGV.Rows[pos];
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						if (ventanaPopUp == null){
							if (this.lista != null){						
								GUIMantenerCalendario ventanaMantCalendario = new GUIMantenerCalendario();
								ventanaMantCalendario.llenarDatos(lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
								ventanaMantCalendario.empleado = lista[int.Parse(fila.Cells[this.colN].Value.ToString())];
								this.pos = pos;
								this.ventanaPopUp = ventanaMantCalendario;
								this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUpActualizar);
								this.ventanaPopUp.ShowDialog();
							}
						}
					cont++;
					}
				}
				else if (cont > 1)
				{
					MessageBox.Show("Seleccione sólo un empleado","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);		
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void eliminarClick(object sender, EventArgs e)
		{
			try
			{
				List<BEEmpleado> eliminar = new List<BEEmpleado>();
				foreach(DataGridViewRow fila in this.resultadosDGV.Rows)
				{
					if((fila.Cells[this.colCheck].Value != null) && (Convert.ToBoolean(fila.Cells[this.colCheck].Value) == true))
					{
						eliminar.Add(this.lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
					}
				}
				if (eliminar.Count > 0)
				{
					if (MessageBox.Show("¿Está seguro que desea eliminar al(a los) empleado(s) seleccionado?", "Pregunta", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
					{
						int resultado;
						BLEmpleado bl = new BLEmpleado();
						resultado = bl.eliminarEmpleado(eliminar);
						
						if (resultado == 1)
						{
							foreach(BEEmpleado empleado in eliminar)
							{
								this.lista.Remove(empleado);
							}
							
							this.resultadosDGV.AllowUserToAddRows = true;
							this.resultadosDGV.Rows.Clear();
							for (int j=0; j<lista.Count; j++)
							{
								string[] fila = null;
								fila = new string[]{
											false.ToString(),
											lista[j].IdEmpleado.ToString(),
								            lista[j].Nombre,
								            lista[j].ApPaterno,
								            lista[j].ApMaterno,
								            lista[j].Area,
								            lista[j].Cargo,
								            lista[j].DocIdentidad,
								            lista[j].Sexo,
								            j.ToString()
								            };
								this.resultadosDGV.Rows.Add(fila);
							}
							this.resultadosDGV.AllowUserToAddRows = false;
							if (this.resultadosDGV.Rows.Count == 1)
								this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
							else if (this.resultadosDGV.Rows.Count == 0)
								this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
							else if (this.resultadosDGV.Rows.Count > 1)
								this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
							//MessageBox.Show("Empleado eliminado", "Aviso");			
						}
						else
						{
							this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
							//MessageBox.Show("Error en la eliminación de empleado(s)","Error");
						}
					}
				}
				else
				{
					MessageBox.Show("Seleccione al menos un empleado","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void turnoClick(object sender, EventArgs e)
		{
			try
			{
				int cont = 0;
				int aux = 0;
				int pos = 0;
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				
				if (cont == 0)
				{
					MessageBox.Show("Seleccione un empleado.","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);	
				}
				else if (cont == 1)
				{				
					DataGridViewRow fila = resultadosDGV.Rows[pos];
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						if (ventanaPopUp == null){
							if (this.lista != null){						
								GUIMantenerTurno ventanaMantTurno = new GUIMantenerTurno();
								ventanaMantTurno.llenarDatos(lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
								ventanaMantTurno.empleado = lista[int.Parse(fila.Cells[this.colN].Value.ToString())];
								this.pos = pos;
								this.ventanaPopUp = ventanaMantTurno;
								this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUp);
								this.ventanaPopUp.ShowDialog();
							}
						}
					}
				}
				else if (cont > 1)
				{
					MessageBox.Show("Seleccione sólo un empleado","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);		
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void verClick(object sender, EventArgs e)
		{
			try
			{
				int cont = 0;
				int aux = 0;
				int pos = 0;
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				
				if (cont == 0)
				{
					MessageBox.Show("Seleccione un empleado.","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);	
				}
				else if (cont == 1)
				{				
					DataGridViewRow fila = resultadosDGV.Rows[pos];
					if (fila.Cells[this.colCheck].Value != null && bool.Parse(fila.Cells[this.colCheck].Value.ToString()))
					{
						if (ventanaPopUp == null){
							if (this.lista != null){
								GUIModificarEmpleado ventanaModEmpleado = new GUIModificarEmpleado();
								ventanaModEmpleado.llenarDatos(lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
								ventanaModEmpleado.empleado = (lista[int.Parse(fila.Cells[this.colN].Value.ToString())]);
								ventanaModEmpleado.deshabilitarTextBoxes();
								this.pos = pos;
								this.ventanaPopUp = ventanaModEmpleado;
								this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUpActualizar);
								this.ventanaPopUp.ShowDialog();
							}
						}
					}
				}
				else if (cont > 1)
				{
					MessageBox.Show("Seleccione sólo un empleado","Aviso",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);		
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void buscarClick(object sender, EventArgs e)
		{
			try
			{
//			if ((nombreTB.Text != "") || (apPaternoTB.Text != "") ||
//			   (apMaternoTB.Text != "") || (areaCB.Text != "<Seleccionar>") ||
//			   ((cargoCB.Text != "<Seleccionar>") && (cargoCB.Text != ""))|| 
//			   (docIdentidadTB.Text != "") || (sexoCB.Text != "<Seleccionar>"))
//			{
				resultadosDGV.Rows.Clear();
				BLEmpleado bl = new BLEmpleado();
				List<BEEmpleado> be = new List<BEEmpleado>();
				
				List<String> datos = new List<String>();
				datos.Add(nombreTB.Text);
				datos.Add(apPaternoTB.Text);
				datos.Add(apMaternoTB.Text);
				datos.Add(areaCB.Text);
				datos.Add(cargoCB.Text);
				datos.Add(docIdentidadTB.Text);
				datos.Add(sexoCB.Text);
				for (int i=0; i<datos.Count; i++)
				{
					if ((datos[i] == null) || (datos[i] == "<Seleccionar>"))
						datos[i] = "";
				}
				be = bl.buscarEmpleado(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5],
				                       datos[6]);
				if (be != null)
				{
					this.resultadosDGV.AllowUserToAddRows = true;
					this.lista = be;
					this.resultadosDGV.Rows.Clear();
					for (int j=0; j<be.Count; j++)
					{
						string[] fila = null;
						fila = new string[]{
									false.ToString(),
									be[j].IdEmpleado.ToString(),
						            be[j].Nombre,
						            be[j].ApPaterno,
						            be[j].ApMaterno,
						            be[j].Area,
						            be[j].Cargo,
						            be[j].DocIdentidad,
						            be[j].Sexo,
						            j.ToString()
						            };
						this.resultadosDGV.Rows.Add(fila);
					}
					this.resultadosDGV.AllowUserToAddRows = false;
					if (this.resultadosDGV.Rows.Count == 1)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
					else if (this.resultadosDGV.Rows.Count == 0)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
					else if (this.resultadosDGV.Rows.Count > 1)
						this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: " + this.resultadosDGV.Rows.Count;
					//MessageBox.Show("Empleado eliminado", "Aviso");		
				}
				else
				{
					this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
					//MessageBox.Show("No se han hallado resultados","Aviso");
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
//			}
//			else
//			{
//				this.nroResultadosLB.Text = "Cantidad de Empleados: 0";
//				MessageBox.Show("No ha ingresado suficientes criterios de búsqueda","Aviso");
//			}
		}
				
		void areaSelectedIndexChanged(object sender, EventArgs e)
		{
			try
			{
				if (areaCB.Text == "<Seleccionar>")
					cargoCB.Text = "<Seleccionar>";
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}  
		
		void habilitarCargo(object sender, EventArgs e)
        {
			try
			{
	        	if (areaCB.Text != "<Seleccionar>")
	        	{
	        		this.sexoCB.Text = "<Seleccionar>";
	        		
	        		this.cargoCB.Enabled = true;
	        		this.cargoCB.Items.Clear();
	        		this.cargoCB.Items.AddRange(new object[] {
										"<Seleccionar>"});
	        		
	        		BLCargo bl = new BLCargo();
	        		  		 
	        		List<BECargo> lista = bl.obtenerCargo(this.areaCB.Text);
	        		
	        		if (lista != null)
		        	{
	        			for(int i=0; i<lista.Count; i++)
	        				this.cargoCB.Items.Add(lista[i].Descripcion);
	        			this.cargoCB.Text = "<Seleccionar>";
		        	}
		        	else
		        	{
		        		//MessageBox.Show("Error cargando datos de la BD","Error");
		        	}
		        }
	        	else
	        	{
	        		this.cargoCB.Enabled = false;
	        	}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
        }
		
		void limpiarClick(object sender, EventArgs e)
		{	
			try
			{
				this.nombreTB.Text = "";
				this.apPaternoTB.Text = "";
				this.apMaternoTB.Text = "";
				this.areaCB.Text = "<Seleccionar>";
				this.cargoCB.Text = "<Seleccionar>";
				this.docIdentidadTB.Text = "";
				this.sexoCB.Text = "<Seleccionar>";
				this.nroResultadosLB.Text = "Cantidad de Empleados encontrados: 0";
				this.resultadosDGV.Rows.Clear();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void seleccionarTodoCheckedChanged(object sender, EventArgs e)
		{
			try
			{
				foreach (DataGridViewRow fila in resultadosDGV.Rows)
				{
					if (this.selTodo.Checked == true)
						fila.Cells[this.colCheck].Value = (bool) true;
					if (this.selTodo.Checked == false)
						fila.Cells[this.colCheck].Value = (bool) false;
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		
		void doubleClickResultadosDGV(object sender, DataGridViewCellEventArgs e)
		{
			try{
				if (resultadosDGV.Rows.Count > 0)
				{
					if ((e.RowIndex != -1) && (e.ColumnIndex != -1))
					{
						foreach (DataGridViewRow fila in this.resultadosDGV.SelectedRows)
						{
							if ((fila.Cells[this.colCheck].Value != null) && !(bool.Parse(fila.Cells[this.colCheck].Value.ToString())))
								fila.Cells[this.colCheck].Value = bool.Parse(true.ToString());
							else if ((fila.Cells[this.colCheck].Value != null) && (bool.Parse(fila.Cells[this.colCheck].Value.ToString())))
								fila.Cells[this.colCheck].Value = bool.Parse(false.ToString());
						}
					}
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
				
		void GUIMantenerEmpleadoLoad(object sender, EventArgs e)
		{
			try
			{
	        	this.sexoCB.Text = "<Seleccionar>";
				BLArea bl = new BLArea();
	  	
	        	List<BEArea> lista = bl.obtenerArea();
	   	
	          	if (lista != null)
	        	{
	          		for(int i=0; i<lista.Count; i++)
	        			this.areaCB.Items.Add(lista[i].Descripcion);
	          		this.areaCB.Text = "<Seleccionar>";
	        	}
	        	else
	        	{
	        		//MessageBox.Show("Error cargando datos de la BD","Error");
	        	}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
	}
}
